#include<bits/stdc++.h>
using namespace std;
const int N = 910;
const int MOD = 1e9+7;
int jc[N];
int jc_1[N];
int qpow(int x,int p){
    int res = 1;
    while(p){
        if(p & 1){
            res = 1ll*res*x%MOD;
        }
        x = 1ll*x*x%MOD;
        p >>= 1;
    }
    return res;
}
int C(int n,int m){
    return 1ll*jc[n]*jc_1[n - m]%MOD*jc_1[m]%MOD;
}
int n,m,c;
int p[N*N];
int solve(int cnt){
    p[0] = 1;
    for(int i = 1;i <= n*m;i++){
        p[i] = 1ll*p[i - 1]*(cnt + 1)%MOD;
    }
    int res = 0;
    for(int i = 0;i<=n;i++){
        for(int j = 0;j<=m;j++){
            if((n - i + m - j)%2){
                res = (res + 1ll*p[i*j]*C(n,i)%MOD*C(m,j)%MOD)%MOD;
            }else{
                res = (res - 1ll*p[i*j]*C(n,i)%MOD*C(m,j)%MOD + MOD)%MOD;
            }
        }
    }
    return res;
}

int main(){
    cin>>n>>m>>c;
    int lmt = max({n,m,c});
    jc[0] = jc_1[0] = 1;
    for(int i = 1;i<=lmt;i++){
        jc[i] = 1ll*jc[i - 1]*i%MOD;
    }
    jc_1[lmt] = qpow(jc[lmt],MOD - 2);
    for(int i = lmt - 1;i >= 1;i--){
        jc_1[i] = 1ll*jc_1[i + 1]*(i + 1)%MOD;
    }
    int ans = 0;
    for(int i = 0;i<=c;i++){
        if((n - i)%2){
            ans = (ans - 1ll*solve(i)*C(c,i)%MOD + MOD)%MOD;
        }else{
            ans = (ans + 1ll*solve(i)*C(c,i)%MOD)%MOD;
        }
    }
    cout<<ans<<'\n';
}